3个变量的信息存储

Information Storage for 3 variables

我正在尝试创建一种在 C# 编程中存储 3 个变量的好方法,两个 ints 和一个 point

我想了个办法,用字典数组

 Dictionary<int, Point>[] ItemList = new Dictionary<int, Point>[4];

我的想法是,一个变量必须介于 1 和 4 之间,所以我会将其作为排序点或每个数组位置。第二个整数,必须介于 0 和 15 之间,并且该点位于 4x4 网格上。我认为这种方法会奏效,除了你不能在字典中使用相同的键之外,它会奏效,而且由于两个整数都会重复,所以我无法将它们换掉。这个想法也出了window,同样的问题

Dictionary<int, int>[,] ItemList = new Dictionary<int, int>[4,4];

我也想过使用元组,但我对它没有太多(任何)经验,而且我对它们的实验并不顺利。它的问题是我无法计算其中有多少物品。我是这样设置的。

Tuple<int, Point>[] ItemList = new Tuple<int, Point>[4];

和我的第一个例子一样的想法,只是没有这样的代码

ItemList[1].Count    /*OR*/     ItemList[1].Length

如果我遗漏了一些非常明显的元组,请告诉我,或者建议一种不同的存储方法,将所有 3 个变量存储在一起会很好。

你可以使用Tuple直接存储3个数据结构。 Tuple 可以有两个以上的项目,并且可以是任何类型。这样,您就不必使用数组:

Tuple<int, int, Point>

要获取值,请使用相应的 Item 属性。对于第一个整数,它将是 yourTuple.Item1。对于第二个 yourTuple.Item2 和点 yourTuple.Item3.

如果你有多个Tuples,你可以使用一个经典的List来存储它们:

var tuples = new List<Tuple<int, int, Point>>();

因为它是一个列表,你可以很容易地得到计数:tuples.Count()

所以 class 对我来说似乎是合适的结构。

public class Something {

    public int Item1 { get; set; }
    public int Item2 { get; set; }
    public Point Location { get; set; }
}

然后将这些对象存储在 List<>

var List<Something> list = new List<Something>();

向列表添加项目...

list.Add(new Something() {Item1 = 4, Item2 = 8, Point = new Point(x,y)});

然后使用一些 LINQ 来获得您想要的。

var onlyItem1IsFour = (from item in list where 4 == item.Item1 select item).ToList();

请原谅我的 LINQ。我习惯了 VB 并且可能 casing/syntax 有点错误

嗯,使用列表的思想,我解决了我的问题。它有点混合了建议的想法和我使用数组的原始想法。如果您想做类似的事情,则不必使用数组,您可以使用具有 3 个值的元组,我只需要一个 int 值的数组,因为我需要根据那个 int 单独存储它们值为(0 到 4 之间)。这是一些可行的代码。

        List<Tuple<int, Point>>[] ItemList = new List<Tuple<int, Point>>[4]; // how to declare it

        for (int i = 0; i < 4; i++)
        {
            ItemList[i] = new List<Tuple<int, Point>>(); // initilize each list
        }

        ItemList[1].Add(new Tuple<int, Point>(5, new Point(1, 2))); // add a new tuple to a specific array level

        int count = ItemList[1].Count; // finds the count for a specific level of the array --> (1)

        int getInt = ItemList[1].ElementAt(0).Item1; // finds int value --> (5)
        Point getPoint = ItemList[1].ElementAt(0).Item2; // finds the point --> (1,2)