在 C# 中创建两种数据类型的可搜索列表

发布于 2025-01-05 00:38:40 字数 140 浏览 0 评论 0原文

从 C# 类中开始数据结构,尝试创建一个字符串和一个 int 一起引用的可搜索数组列表(名称和数字)。我需要能够搜索名称,并检索名称和它所附加的数字。有人告诉我可以使用结构的数组列表,但从未使用过结构。有什么简单的解释,或者更好的方法吗?

先感谢您。

Taking beginning Data Structures in C# class, trying to make a searchable arraylist of a string and an int referenced together (name and number).I need to be able to search for the name, and retrieve both the name and the number it's attached to. I was told I can use an arraylist of structs, but have never used structs. Any simple explanation how, or a better way?

Thank you in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

烂柯人 2025-01-12 00:38:40

您可能应该使用类似散列的东西,因为结构的 ArrayList 是一个有点方钉圆孔。

您可以像声明类一样声明结构。

public struct Foo {
    public String Bar { get; set; }
    public Int32  Biz { get; set; }
}

您可以像使用任何类型一样创建一个数组列表。

var list = new ArrayList();
list.add(object);

这里的另一个问题是 ArrayList 不是通用的,它会将所有内容转换为 Object,这意味着您必须将所有内容转换回类型 Foo 才能使用它。

var foo = (Foo)list.item(0);

如果您必须使用像 List 这样的通用列表类并声明其类型,走 List 而不是 Hash 的路线,那么您的情况会好得多;

var list = List<Foo>();
var foo = new Foo { Bar = "Hello World", Biz = 1 };
list.add(foo);

至于搜索列表,我更喜欢使用 LINQ 方法,因为它们编码速度快且易于阅读。

var matches = list.Where( x => x.Biz > 1 );

但如果你做不到这一点,那么迭代总是有效的

var matches = new List<Foo>();
foreach ( var foo in list ) {
    if ( list.Biz > 1 ) {
        matches.add(foo);
    }
}

You should probably be using something like a hash for this as an ArrayList of structs is a bit square peg round hole.

You declare a struct just like a calss.

public struct Foo {
    public String Bar { get; set; }
    public Int32  Biz { get; set; }
}

And you can make an array list of then as you would with any type

var list = new ArrayList();
list.add(object);

The other issue here is that ArrayList isn't generic, it will cast everything to Object which means you will have to cast everything back to type Foo to work with it.

var foo = (Foo)list.item(0);

You would be much better off, if you have to go the route of List instead of Hash using a generic list class like List and declaring its type;

var list = List<Foo>();
var foo = new Foo { Bar = "Hello World", Biz = 1 };
list.add(foo);

As for searching a list, I prefer to use the LINQ methods, because they are quick to code and easy to read.

var matches = list.Where( x => x.Biz > 1 );

But if you cannot do that then iteration always works

var matches = new List<Foo>();
foreach ( var foo in list ) {
    if ( list.Biz > 1 ) {
        matches.add(foo);
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文