-1

私はOOPの原則を学び、実践しようとしています.こぶを乗り越えるには、例を使って助けが必要です. 次のコードがあります。

using System.Collections.Generic;
namespace Test
{
    class Program
    {
        static void Main()
        {
            Dictionary<string, string> dictionary = new Dictionary<string, string>();

            dictionary.Add("cat", "one");
            dictionary.Add("dog", "two");
            dictionary.Add("llama", "three");
            dictionary.Add("iguana", "four");

            var test1 = GetKVP(dictionary, "llama");
            var test2 = GetValue(dictionary, "llama");
            var test3 = GetPosition(dictionary, "llama");
        }

        static KeyValuePair<string, string> GetKVP(Dictionary<string, string> dict, string key_to_find)
        {
            foreach (KeyValuePair<string, string> kvp in dict)
            {
                if (kvp.Key == key_to_find)
                {return kvp;}
            }
            return new KeyValuePair<string, string>();
        }

        static string GetValue(Dictionary<string, string> dict, string key_to_find)
        {
            foreach (KeyValuePair<string, string> kvp in dict)
            {
                if (kvp.Key == key_to_find)
                {return kvp.Value;}
            }
            return string.Empty;
        }

        static int GetPosition(Dictionary<string, string> dict, string key_to_find)
        {
            int counter = 0;
            foreach (KeyValuePair<string, string> kvp in dict)
            {
                if (kvp.Key == key_to_find)
                {return counter;}
                counter += 1;
            }
            return -1;
        }
    }
}

私がやろうとしているのは、コード セットを統合して、コードを複製せずに異なるデータ型を返す単一のメソッドを持つことができるようにすることです。 辞書を検索するためのより効率的な方法がいくつかあるという事実についてコメントしないでください。これが理想的ではないことは承知しています。私の人生では、そのようなものを実装する方法を実際に視覚化することはできません.

4

2 に答える 2

0

これを試すこともできますが、あまり役に立たないと思います:

static R GetResult<R>(Dictionary<string, string> dict, string key_to_find, Func<KeyValuePair<string, string>, R> selector, R otherwise)
{
    return dict.Where(kvp => kvp.Key == key_to_find).Select(kvp => selector(kvp)).DefaultIfEmpty(otherwise).First();
}

static KeyValuePair<string, string> GetKVP(Dictionary<string, string> dict, string key_to_find)
{
    return GetResult(dict, key_to_find, kvp => kvp, new KeyValuePair<string, string>());
}

static string GetValue(Dictionary<string, string> dict, string key_to_find)
{
    return GetResult(dict, key_to_find, kvp => kvp.Value, String.Empty);
}

static int GetPosition(Dictionary<string, string> dict, string key_to_find)
{
    return dict.Where(kvp => kvp.Key == key_to_find).Select((kvp, n) => n).DefaultIfEmpty(-1).First();
}
于 2015-07-09T05:40:08.260 に答える