我有一个数组列表,每个数组中有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);
答案 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"];