我有一份人们对问卷的回答列表。答案目前是一个字符串数组,所以我的对象看起来像
List<string[]> answers = new List<string[]>()
{ new string[]{"T","A","T","F","B"},
new string[]{"F","A","T","F","B"},
new string[]{"T","A","F","F","B"}
};
我需要找到所有值都相同的那些数组索引和值。
结果对象可以是
string[]
喜欢 {"","A","","F","B"}
或某种类型的自定义对象元组,例如 {1,"A"}, {3, "F"}, {4, "B"}
我可以假设所有字符串数组的长度都相同。
我可以通过蛮力和循环来做到这一点,但我想知道是否有更有效的清洁方式,可能是通过 Linq。
这就引出了一个问题,Linq 是否只是在内部使用循环,而您节省的唯一效率是代码行和必须创建局部变量。
更新:
脱离 O. R. Mapper 和 Vajura
我在想两个循环
得到第一组答案,它给了我每个 string[] 的长度,并给了我答案应该是什么。即使第一个人是唯一回答 A 的人,那么所有其他非 A 将自动取消该索引的资格
for each index in string[]
answer = List[0][index]
for i=1 to List.Count - 1
compare answer to List[i][index]
if false exit loop
if we made it through it is good
最佳答案
像这样的东西应该工作:
answers
.SelectMany(x => x.Select((y, idx) => new { c = y, index = idx })) // 1
.GroupBy(x => x) // 2
.Where(x => x.Count() == answers.Count) // 3
.ToDictionary(x => x.Key.index, x => x.Key.c); // 4
这是工作
fiddle
解释是:
answer.Count
的组许多项目,所以我们确保字母索引对存在于所有内部数组中,换句话说:一个字母出现在所有数组中的相同索引处。 关于c# - 找出所有相同的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26361185/