【问题标题】:Giving same data parameters same instance给相同的数据参数相同的实例
【发布时间】:2015-01-02 04:55:47
【问题描述】:

我有一个这样结构的文本文件:

{A, B, C, D}
{B, E, D}
{C, A, F}
......

第一行代表起始位置,其他为目的地。例如:

A -> B, C, D
B -> E, D
C -> A, F

我有一个名为 Location 的基本类,我在其中保存所有位置和目的地。

Location locA = new Location();
Location locB = new Location();

我有兴趣使用相同的实例位置而不为每个人创建新实例,例如:

Connection(locA, locB));
Connection(locA, locC));
Connection(locA, locD));
Connection(locB, locE);

问题是当我拆分我的文本文件时。我将第一行放在列表中。和另一个列表中的目的地。 :

DKLocations Startloc = new DKLocations();
DKLocations Destloc = new DKLocations();

List<DKLocations> DKLocations = new List<DKLocations>();

这是我的代码:

 foreach (var line in File.ReadLines(@"routes.txt"))
                {

                    foreach (Match oMatch in Regex.Matches(line, @"\{([^,]*)"))
                    {
                        ComboBox1.Items.Add(oMatch.Groups[1].Value);
                        Startloc.Identifier = DKLocations.Count().ToString();
                        Startloc.LocationName.Add(oMatch.Groups[1].Value);
                        DKLocations.Add(Startloc);

                        var dest = Regex.Matches(line, @"\p{L}+")
                        .Cast<Match>()
                        .Skip(1)
                        .Select(match => match.Value)
                        .ToList();

                        var price = Regex.Matches(line, @"\d+")
                        .Cast<Match>()
                        .Select(match => match.Value)
                        .ToList();

                        var destAndPrice = dest.Zip(price, (d, p) => new { dest = d, price = p });

                        foreach (var i in destAndPrice)
                        {

                            ListBox1.Items.Add(oMatch.Groups[1].Value + " to " + i.dest + " " + i.price + " kr." + DKLocations.Count().ToString());

                        }
                    }

分割时如何给目的地与起始位置相同的实例?

【问题讨论】:

  • 听起来您应该将您的位置存储在字典中,以便您可以根据需要调用它们。

标签: c# list iterator


【解决方案1】:

听起来你想要“记忆”模式。

在 C# 中,这通常使用字典来完成。例如:

Dictionary<string, Location> memos = new Dictionary<string, Location>();

然后在读取数据时,首先检查字典:

Location location;

if (!memos.TryGetValue(locationId, out location))
{
    location = new Location(locationId);
    memos[locationId] = location;
}

// do stuff with location now

主要是有一种方法来识别您想要的Location 实例,然后将其用作字典中的键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    相关资源
    最近更新 更多