根据值查找关联的键 - 字典C#

时间:2017-01-23 20:25:59

标签: c# dictionary

我有两个单独的lists; List<datetime>&amp;分别为List<string>。例如:

  • {1/1 / 2000,A},
  • {1/2 / 2000,B},
  • {1/3/2000,A},
  • {5/10/2004,A}

我希望在List<datetime> =“A”时获得string。 我确实创建了一个dictionary<List<datetime>,string>但是它根据keys找到了values

4 个答案:

答案 0 :(得分:3)

您希望根据特定密钥跟踪日期。那么,你想要做的是:

Dictionary<string, List<DateTime>>

这样。您可以拥有特定字符串的值列表。

e.g。 A -> 1/1/2017, 1/2/2017, 1/3/2017

var dictionary = new Dictionary<string, List<DateTime>>();

//populate your dictionary
dictionary.Add("cat", new List<DateTime>{DateTime.Now, DateTime.Now.AddDays(1)});

if (dictionary.ContainsKey("cat"))
{
    var dates = dictionary["cat"];
    //now you have access to those dates
}

答案 1 :(得分:2)

你应该做下面的事情,基本上扭转你的关键和价值。

  var dateTimeByStringLookup = new Dictionary<string, List<DateTime>>()
                {
                    {"a", new List<DateTime>() {new DateTime(2017, 1, 2), new DateTime(2017, 1, 3)}}
                };
                var datetimes = new List<DateTime>();
                dateTimeByStringLookup.TryGetValue("a", out datetimes);

答案 2 :(得分:1)

这样的东西?假设列表与列表中的索引匹配。

var list1 = new List<DateTime> {new DateTime(2000,1,1), new DateTime(2000, 1, 2), new DateTime(2000, 1, 3), new DateTime(2004, 5, 10) };
var list2 = new List<string> {"A", "B" , "A" , "A" };

var output = list1.Zip(list2, (time, str) => new {time, str})
    .Where(o => o.str == "A") // Change to the string you want to filter
    .Select(o => o.time)
    .ToList();

foreach (var dateTime in output) {
    Console.WriteLine(dateTime);
}

Console.ReadKey();

答案 3 :(得分:0)

foreach(KeyValuePair<string, List<DataTime>> kvp in dictionary)
{
    if(kvp.Value == listImLookingFor)
    {
       var key = kvp.Key;
    }
}