using System.Diagnostics;
using System;
using System.Linq;
using System.Collections.Generic;
public class Test
{
static string[][] GetRandomJaggedArray(int numberOfArrays, int numberOfElements)
{
string[][] temp = new string[numberOfArrays][];
for (int i = 0; i < numberOfArrays; i++)
{
temp[i] = new string[numberOfElements];
for (int i2 = 0; i2 < temp.Length; i2++)
temp[i][i2] = Guid.NewGuid().ToString();
}
return temp;
}
static TimeSpan getElementsAtIndexLINQ(string[][] listOfArrays, int index, int count)
{
Stopwatch s = new Stopwatch();
List<string> myListOfStrings;
s.Start();
for (int i = 0; i < count; i++)
myListOfStrings = listOfArrays.Select(a => a[index]).ToList();
s.Stop();
return s.Elapsed;
}
static TimeSpan getElementsAtIndexFOR(string[][] listOfArrays, int index, int count)
{
Stopwatch s = new Stopwatch();
s.Start();
for (int i2 = 0; i2 < count; i2++ ) {
List<string> myListOfStrings = new List<string>();
for (int i = 0; i < listOfArrays.Length; i++)
myListOfStrings.Add(listOfArrays[i][index]);
}
s.Stop();
return s.Elapsed;
}
static void Main(string[] args)
{
string[][] test1 = GetRandomJaggedArray(100, 1000);
string[][] test2 = GetRandomJaggedArray(100, 1000);
getElementsAtIndexFOR(test2, 1, 1);
TimeSpan t2 = getElementsAtIndexFOR(test2, 1, 10);
getElementsAtIndexLINQ(test1, 1, 1);
TimeSpan t1 = getElementsAtIndexLINQ(test1, 1, 10);
Console.WriteLine("Linq method took {0} ticks to execute", t1.Ticks);
Console.WriteLine("For method took {0} ticks to execute", t2.Ticks);
}
}
dXNpbmcgU3lzdGVtLkRpYWdub3N0aWNzOwp1c2luZyBTeXN0ZW07CnVzaW5nIFN5c3RlbS5MaW5xOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKCnB1YmxpYyBjbGFzcyBUZXN0CnsKICAgIHN0YXRpYyBzdHJpbmdbXVtdIEdldFJhbmRvbUphZ2dlZEFycmF5KGludCBudW1iZXJPZkFycmF5cywgaW50IG51bWJlck9mRWxlbWVudHMpCiAgICB7CiAgICAgICAgc3RyaW5nW11bXSB0ZW1wID0gbmV3IHN0cmluZ1tudW1iZXJPZkFycmF5c11bXTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlck9mQXJyYXlzOyBpKyspCiAgICAgICAgewogICAgICAgICAgIHRlbXBbaV0gPSBuZXcgc3RyaW5nW251bWJlck9mRWxlbWVudHNdOwogICAgICAgICAgIGZvciAoaW50IGkyID0gMDsgaTIgPCB0ZW1wLkxlbmd0aDsgaTIrKykKICAgICAgICAgICAgICAgdGVtcFtpXVtpMl0gPSBHdWlkLk5ld0d1aWQoKS5Ub1N0cmluZygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICB9CgogICAgICAgIHJldHVybiB0ZW1wOwogICAgfQoKICAgIHN0YXRpYyBUaW1lU3BhbiBnZXRFbGVtZW50c0F0SW5kZXhMSU5RKHN0cmluZ1tdW10gbGlzdE9mQXJyYXlzLCBpbnQgaW5kZXgsIGludCBjb3VudCkKICAgIHsKICAgICAgICBTdG9wd2F0Y2ggcyAgPSBuZXcgU3RvcHdhdGNoKCk7IAogICAgICAgIExpc3Q8c3RyaW5nPiBteUxpc3RPZlN0cmluZ3M7CgogICAgICAgIHMuU3RhcnQoKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspICAgICAgICAgICAgCiAgICAgICAgICAgIG15TGlzdE9mU3RyaW5ncyA9IGxpc3RPZkFycmF5cy5TZWxlY3QoYSA9PiBhW2luZGV4XSkuVG9MaXN0KCk7ICAgICAgICAgICAgCiAgICAgICAgcy5TdG9wKCk7CiAgICAgICAgcmV0dXJuIHMuRWxhcHNlZDsKICAgIH0KCiAgICBzdGF0aWMgVGltZVNwYW4gZ2V0RWxlbWVudHNBdEluZGV4Rk9SKHN0cmluZ1tdW10gbGlzdE9mQXJyYXlzLCBpbnQgaW5kZXgsIGludCBjb3VudCkKICAgIHsKICAgICAgICBTdG9wd2F0Y2ggcyA9IG5ldyBTdG9wd2F0Y2goKTsKICAgICAgICBzLlN0YXJ0KCk7CiAgICAgICAgZm9yIChpbnQgaTIgPSAwOyBpMiA8IGNvdW50OyBpMisrICkgewogICAgICAgIAlMaXN0PHN0cmluZz4gbXlMaXN0T2ZTdHJpbmdzID0gbmV3IExpc3Q8c3RyaW5nPigpOwogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3RPZkFycmF5cy5MZW5ndGg7IGkrKykKICAgICAgICAgICAgICAgIG15TGlzdE9mU3RyaW5ncy5BZGQobGlzdE9mQXJyYXlzW2ldW2luZGV4XSk7CiAgICAgICAgfQogICAgICAgIHMuU3RvcCgpOwogICAgICAgIHJldHVybiBzLkVsYXBzZWQ7CiAgICB9CgogICAgc3RhdGljIHZvaWQgTWFpbihzdHJpbmdbXSBhcmdzKQogICAgewogICAgICAgIHN0cmluZ1tdW10gdGVzdDEgPSBHZXRSYW5kb21KYWdnZWRBcnJheSgxMDAsIDEwMDApOwoKICAgICAgICBzdHJpbmdbXVtdIHRlc3QyID0gR2V0UmFuZG9tSmFnZ2VkQXJyYXkoMTAwLCAxMDAwKTsKCmdldEVsZW1lbnRzQXRJbmRleEZPUih0ZXN0MiwgMSwgMSk7CgogICAgICAgIFRpbWVTcGFuIHQyID0gZ2V0RWxlbWVudHNBdEluZGV4Rk9SKHRlc3QyLCAxLCAxMCk7CgpnZXRFbGVtZW50c0F0SW5kZXhMSU5RKHRlc3QxLCAxLCAxKTsKICAgICAgICBUaW1lU3BhbiB0MSA9IGdldEVsZW1lbnRzQXRJbmRleExJTlEodGVzdDEsIDEsIDEwKTsKCiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIkxpbnEgbWV0aG9kIHRvb2sgezB9IHRpY2tzIHRvIGV4ZWN1dGUiLCB0MS5UaWNrcyk7CgogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJGb3IgbWV0aG9kIHRvb2sgezB9IHRpY2tzIHRvIGV4ZWN1dGUiLCB0Mi5UaWNrcyk7CgogICAgfQp9