C# 只需检查多个C语句

C# 只需检查多个C语句,c#,arrays,if-statement,C#,Arrays,If Statement,目前正在开发一款小型控制台游戏,想知道是否有人有一种简单的方法来缩短类似这样的内容: if (map[playerX - 1, playerY] == "R1" || map[playerX - 1, playerY] == "R2" || map[playerX - 1, playerY] == "R3" || map[playerX - 1, playerY] == "Z1" || map[playerX - 1, playerY] == "Z2" || map[playerX

目前正在开发一款小型控制台游戏,想知道是否有人有一种简单的方法来缩短类似这样的内容:

if (map[playerX - 1, playerY] == "R1"
 || map[playerX - 1, playerY] == "R2"
 || map[playerX - 1, playerY] == "R3"
 || map[playerX - 1, playerY] == "Z1" 
 || map[playerX - 1, playerY] == "Z2" 
 || map[playerX - 1, playerY] == "Z3"
 || map[playerX - 1, playerY] == "S1 " 
 || map[playerX - 1, playerY] == "S2" 
 || map[playerX - 1, playerY] == "S3")
制作一个列表或其他东西,并检查map[playerX-1,playerY]是否等于其中的任何对象或其他东西

提前谢谢你的帮助。
Lukas Leder

您对R1、Z1等感兴趣的特定匹配值应填充到哈希集中


HashSet有一个上面显示的一致快速的函数,它适合您的目的。正如下面提到的“FrimCordDas”,您应该考虑将此哈希集声明为静态只读字段,以确保只需要初始化一次。

< P>,您对R1、Z1等感兴趣的特定匹配值应该填充到一个哈希集中。
HashSet有一个上面显示的一致快速的函数,它适合您的目的。正如下面提到的“FrimCordDas”,您应该考虑将此哈希集声明为静态只读字段,以确保只需要初始化一次。

< P> JEP,正如@ MJWIRS指出的。

事实上,所有IList或IDictionary子体以及类似的子体都有一个Contains方法。因此,您可以选择哪种类型的列表或集合最适合您的需要


例如,列表是实例列表A=新列表;a、 Addb

Jep,正如@mjwills指出的那样

事实上,所有IList或IDictionary子体以及类似的子体都有一个Contains方法。因此,您可以选择哪种类型的列表或集合最适合您的需要


例如,列表是实例列表A=新列表;a、 Addb

我以前从未使用过哈希集,不知道您能否告诉我如何创建哈希集。哈希集继承自collections.Generic。您可以像列表一样初始化,例如:HashSet=newhashset;您是对的,HashSet检查元素是否在集合中很快,但对于少量元素,数组应该更快。@FilipCordas通常相差2或3项,因此无论出于何种目的,数组都不会更快,除非你有一个真正可怕的散列代码用于所讨论的类型。@请回答“是”和“否”。我对所讨论的数组进行了1000000次迭代,结果相差约40ms,而散列集的速度更快。但是,如果您没有像答案中那样在每个方法调用上创建一个新的哈希集,那么这就是问题所在。因此,他应该将HashSet设置为静态只读变量,这样HashSet的性能会有所提高。我以前从未使用过HashSet,不知您能否告诉我如何创建一个HashSet。HashSet继承自collections.Generic。您可以像列表一样初始化,例如:HashSet=newhashset;您是对的,HashSet检查元素是否在集合中很快,但对于少量元素,数组应该更快。@FilipCordas通常相差2或3项,因此无论出于何种目的,数组都不会更快,除非你有一个真正可怕的散列代码用于所讨论的类型。@请回答“是”和“否”。我对所讨论的数组进行了1000000次迭代,结果相差约40ms,而散列集的速度更快。但是,如果您没有像答案中那样在每个方法调用上创建一个新的哈希集,那么这就是问题所在。因此,他应该使HashSet成为一个静态只读变量,HashSet.IEnumerable还支持Contains-,这将提高性能。但是我通常会推荐HashSet,因为它有一个更一致的性能配置文件。啊:-d在我匆忙中查找了不支持它的IEnumerable,而忽略了IEnumerable。好的,很高兴知道performance pointIEnumerable还支持Contains-。但是我通常会推荐HashSet,因为它有一个更一致的性能配置文件。啊:-d在我匆忙中查找了不支持它的IEnumerable,而忽略了IEnumerable。好的,很高兴知道这个性能点
HashSet hashSet = new HashSet<string>
{
    "R1",
    "R2",
    "R3",
    "Z1",
    "Z2",
    "Z3",
    "S1 ", // I am unclear whether you want this space or not
    "S2",
    "S3"
};
if (hashSet.Contains(map[playerX - 1, playerY])