使用linq查找数组列表中的项目

时间:2015-03-04 18:11:32

标签: c# arrays linq

我有一个数组列表,每个数组中有2个字符串。我需要检查每个数组中的第一个字符串是否与给定的数字匹配。我假设linq是最好的方法。我在这里找到了一个有用的答案:Find an item in List by LINQ? 它声明要在列表中找到一个项目:

string result = myList.Single(s => s == search);

从评论中,我想我想使用SingleOrDefault。但是如何让它搜索列表中每个数组的第一项? 这是我的数组列表:

List<string[]> shipsLater = new List<string[]> {};    
string[] itemArr = { item.pid, future };
shipsLater.Add(itemArr);

3 个答案:

答案 0 :(得分:2)

所以你有一个数组列表,如:

List<string[]> list = new List<string[]>();

现在每个数组都包含两个元素,并且您希望比较第一个元素是否等于您的搜索参数。你可以这样做:

var query = list.Where(arr=> arr.First() == search);

这将为您提供列表中符合您条件的所有元素。

来自comment

  

基本上只是真或假,我是否找到了

如果您只是想要取回一个布尔结果来指示条件是否满足,请使用Enumerable.Any,如:

bool result = list.Any(arr=> arr.First() == search);

如果您的参数属于int类型,请拨打ToString,如:

bool result = list.Any(arr=> arr.First() == search.ToString());

答案 1 :(得分:0)

您可以使用Dictionary()获得最佳效果;如果你想使用string[],请使用:

string result = myList.Single(s => s[0] == search);

答案 2 :(得分:0)

您的初始阵列结构存在问题。小心地转换为字典突然使实现变得简单。

List<string[]> shipsLater = new List<string[]>
{
  new []{ "pid1", "abc" },
  new []{ "pid1", "xyz" },
  new []{ "pid2", "123" }
};

Dictionary<string, IEnumerable<string>> lookupByPid = shipsLater
  .GroupBy(g => g[0])
  .ToDictionary(k => k.Key, v => v.Select(i => i[1]));

// now your lookups are as simple as...
IEnumerable<string> matches = lookupByPid["pid1"];