如何检查字符串s是否在Dictionary <int,list <string =“”>&gt;中的List <string>内在c#?

时间:2017-06-10 00:38:01

标签: c#

我有Dictionary<int, List<string>> enrolledStudents

key是一个int,它是一个纸质代码。 value是一个字符串列表,其中字符串是学生姓名

我想知道的是如何查看string s

内的enrolledStudents是否在此列表中

例如

if(string s in List<string> of enrolledStudents){
    return enrolledStudent.key;
}

4 个答案:

答案 0 :(得分:1)

要获取特定学生的所有纸质代码,您可以这样做:

List<int> paperCodesForStudent = enrolledStudents
    .Where(item => item.Value.Contains("studentName"))
    .Select(item => item.Key)
    .ToList();

您可以将此方法设为一个方法,并且还可以为名称检查添加不区分大小写的比较:

private static List<int> GetPaperCodesForStudent(string studentName,
    Dictionary<int, List<string>> enrolledStudents)
{
    return enrolledStudents
        .Where(item => item.Value.Any(name =>
            name.Equals(studentName, StringComparison.OrdinalIgnoreCase)))
        .Select(item => item.Key)
        .ToList();
}

答案 1 :(得分:0)

使用linq

QLayout.TakeAt(n)

请注意,此搜索是线性的。 如评论中所述,您可以重新创建另一个字典一次以优化搜索速度。

def create_sliders(self):
    if len(self.sliders_list):
        for sl in self.sliders_list:
            sl.deleteLater()
    self.sliders_list = []
    for index in range(self.model.rowCount()):
        if self.model.item(index).checkState():
            slid = QSlider(Qt.Horizontal)
            self.sliders.addWidget(slid)
            self.sliders_list.append(slid)

现在你可以使用pagemap从这样的学生那里获取页面。

return enrolledStudents.FirstOrDefault(kvp => kvp.Value.Contains(s)).Key;

答案 2 :(得分:0)

Dictionary<int, List<string>> enrolledStudents = new Dictionary<int, List<string>>();
bool any = enrolledStudents.Any(x => x.Value.Contains("myString"));

或者如果你想要第一把钥匙

var key = enrolledStudents.FirstOrDefault(kvp => kvp.Value.Contains(s))?.Key ?? "";

如果FirstOrDefault()返回null,请注意单个问号。

答案 3 :(得分:0)

没有LINQ的解决方案

// 1-st解决方案

Dictionary<int, List<string>> group = new Dictionary<int, List<string>>();
List<string> newList = new List<string> { "Orange", "Strawberry", "Banana"};
group.Add(1, newList); //Group of Fruits

newList = new List<string> { "Hulk", "Spiderman", "Batman" };
group.Add(2, newList); //Group of Super-Heroes

int GroupKey = 0;
foreach(var groupItem in group)
{
    foreach(var stringValue in groupItem.Value)
    {
        if(stringValue == "Spiderman")
        {
            GroupKey = groupItem.Key;
            break;
        }
    } 
    if(GroupKey > 0)
        break
}

//我认为你应该在你的情况下使用的第二种解决方案 (因为每个学生只有一个键(数字)也许最好使用字符串而不是List,只有当你和学生小组一起工作时才应该考虑第一个解决方案)

Dictionary<int, string> enrolledStudents = new Dictionary<int, string>(); 
enrolledStudents.Add(1, "Jamie Fox");  //Student 1 
enrolledStudents.Add(2, "Arnold Spenser");  //Student 2
enrolledStudents.Add(3, "Jack & Jones");  //Student 3

int StudentNumber = 0;
foreach (var student in enrolledStudents)
{
    if(student.Value == "Arnold Spenser")
    {
        StudentNumber = student.Key;
        break;
    }
}