1

我需要一个配对列表,带有“字符串”、“字符串”。

试过:

Dictionary<string, string> Categories= new Dictionary<string, string>();

但不能添加“700”、“2”和“700”、“3”。我需要一个 Pair,我可以在需要时添加所有内容。就像一个可以包含 N 个 Vector(string, string) 的 Vector。我需要哪种结构?很快,因为我需要在 LINQ 中比较它们,之后:

myStructs = from MyObject s in MyObjects
               join c in Categories on s.IDCategory.UniqueID equals c.Key
               join d in Categories on s.Stars equals d.Value
               select s;
4

5 回答 5

9

尝试List<Tuple<string, string>>,或者为了提高可读性,只需创建一个新类型。

如果您需要它在 linq 期间有意义,您可以将元组转换为匿名类型(let在此处使用)为该类型提供一些合理的属性名称:

var items = new List<Tuple<string, string>>
    {
        new Tuple<string, string>("Adam", "1"), 
        new Tuple<string, string>("Adam", "2")
    };

var names = from i in items
            let person = new { Name = i.Item1, Number = i.Item2 }
            select person.Name;

使其在 linq 查询期间更具可读性。

它的类型被大量使用,我建议使用更好的属性名称创建您自己的类型,以便清楚起见,如Servy 的回答。从长远来看,Tuple<string, int, bool>不如:

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public bool LikesCake { get; set; }
}

元组相等性基于它的所有属性与相同类型元组的实例的相等性。例如,new Tuple("Adam", "1").Equals(new Tuple("Adam", "1"))将是真的。

列表也不会停止重复项。如果您需要在所有属性中强制执行唯一性,那么HashSet<Tuple<string, string>>这就是您所需要的。

于 2012-07-17T15:09:08.757 回答
4

只需创建自己的。

public class Pair
{
  public string First {get;set;}
  public string Second {get;set;}
}

然后你可以有一个List<Pair>来保存你的数据。

有几个可能的库类,您可以根据自己的需要重新使用它们,但特别是如果这对实际上代表了某些东西(意味着您要将类和属性重命名为更有意义的东西),那么拥有它会很有用在它自己的类中表示这一点。如果您确实只想重用现有类型,那么Tuple<string,string>可能是最佳选择。

于 2012-07-17T15:11:16.383 回答
0

List<KeyValuePair<string, string>>如果您使用 .NET 3.5 或更低版本,A可能会运行良好,如果 4 或更高版本,List<Tuple<string, string>>将是赢家。

于 2012-07-17T15:12:33.133 回答
0

尝试使用List<KeyValuePair<string, string>>.

于 2012-07-17T15:09:15.633 回答
0

ADictionary是散列位置键,因此字典中不能有重复项。您可以<string,string>使用 aKeyValuePairTuple

于 2012-07-17T15:10:35.497 回答