1

私は、int / floatの配列やその他のものを、Listよりも高速(多分?)であるため、C#で定期的に操作することがよくあります。現在、タイプごとに数十の関数が実装されています。

/// <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 に答える