1

我经常在 C# 中定期使用 int/float 数组和其他东西,因为它们比 List 更快(也许?)。目前我已经为每种类型实现了几十个函数:

/// <summary>
/// Checks if the array contains the given value.
/// </summary>
public static bool contains(int[] values, int value) {
    for (int s = 0, sl = values.Length; s < sl; s++) {
        if (values[s] == value) {
            return true;
        }
    }
    return false;
}
/// <summary>
/// Checks if the array contains the given value.
/// </summary>
public static bool contains(float[] values, float value) {
    for (int s = 0, sl = values.Length; s < sl; s++) {
        if (values[s] == value) {
            return true;
        }
    }
    return false;
}

有没有办法以通用的方式实现这些?或者只有当我使用时才有可能List<T>

4

2 回答 2

3

System.Array类型有一个令人眼花缭乱的静态方法数组,可以帮助您搜索、排列、排序等您的数组。你绝对不需要自己动手。这些静态方法(如Find, FindAll)也接受泛型参数。这是在 PowerShell 的帮助下转储的列表:

Name                           Definition                    
----                           ----------                    
AsReadOnly                     static System.Collections.... 
BinarySearch                   static int BinarySearch(ar... 
Clear                          static void Clear(array ar... 
ConstrainedCopy                static void ConstrainedCop... 
ConvertAll                     static TOutput[] ConvertAl... 
Copy                           static void Copy(array sou... 
CreateInstance                 static array CreateInstanc... 
Equals                         static bool Equals(System.... 
Exists                         static bool Exists[T](T[] ... 
Find                           static T Find[T](T[] array... 
FindAll                        static T[] FindAll[T](T[] ... 
FindIndex                      static int FindIndex[T](T[... 
FindLast                       static T FindLast[T](T[] a... 
FindLastIndex                  static int FindLastIndex[T... 
ForEach                        static void ForEach[T](T[]... 
IndexOf                        static int IndexOf(array a... 
LastIndexOf                    static int LastIndexOf(arr... 
ReferenceEquals                static bool ReferenceEqual... 
Resize                         static void Resize[T]([ref... 
Reverse                        static void Reverse(array ... 
Sort                           static void Sort(array arr... 
TrueForAll                     static bool TrueForAll[T](... 
于 2012-12-03T15:37:43.043 回答
2

感谢@Servy 的更正:

/// <summary>
/// Checks if the array contains the given value.
/// </summary>
public static bool Contains<T>(T[] values, T value) {
    for (int s = 0, sl = values.Length; s < sl; s++) {
        if (object.Equals(values[s].value)) {
            return true;
        }
    }
    return false;
}

对于这种事情,你也可以使用 Linq :

using System.Linq;
...
var myArray = new float[12];
...
if(myArray.Any(a => a == 2.4))
于 2012-12-03T15:33:27.920 回答