1. C# 查找一組數(子數組)每個元素在(另一組數)父數組的索引

    2021-03-18 11:52發布

    C# 查找一個指定的值是否在一個數組(或者是list)中 ,,,

        /// <summary>

        /// 查找  (數值在列表中的位置)

        /// 不存在返回-1

        /// </summary>

        /// <param name="numvalue">值</param>

        /// <param name="handcard">列表</param>

        /// <returns></returns>

        public static int Seach(int numvalue, List<int> handcard)

        {

            int n = -1;

            for (int i = 0; i < handcard.Count; i++)

            {

                if (numvalue== handcard[i])

                {

                    n = i;

                    return n;

                }

            }

            return n;

        } 

    在查找一個子數組,在其父數組中的位置的時候遇到一個問題,,,
    若沒有重復的值還好,直接按照下面的代碼寫就可以了,,返回的list 是每個子數組中的每個元素在父數組的中位置,,,若不存在則用-1占位置,,,

        /// <summary>

        /// 查找  ()

        /// (找一組牌在手牌的位置id) 

        /// 不存在返回-1

        /// </summary>

        /// <param name="value1">牌值數組</param>

        /// <param name="handcard">父list</param>

        /// <returns></returns>

        public static List<int> Seach(List<int> value1, List<int> handcard)

        {

            List<int> templist = new List<int>();

            for (int i = 0; i < value.Count; i++)

            {

                for (int j = 0; j < handcard.Count; j++)

                {

                    if (value1[i] == handcard[j])

                    {

                        templist.Add(j);                 

                    }

                }

                 templist.Add(-1);      

            }

            return templist;

        } 

      

    若使用上面方法進行查找一組數在另一組數中的索引id,,,當要查找的數中有相同的數時,那么則會出現,,每次查找都返回的都是第一次出現的索引,,,這時就需要做些限制 (需要注意的是傳遞的此方法使用的是引用類型的參數,不能在方法內修改傳遞進來的list中的值,若修改有影響則需要新建list來做為參數傳遞,進行查找)、、、


    看下面的例子:

    using System;

    using System.Collections.Generic;


    namespace unitygametest

    {

        class Program

        {

            static void Main(string[] args)

            {

                //要查找的list

                List<int> findCards = new List<int> { 34, 2, 2 };

                //被查找的的list (不想被改變的list)

                List<int> Cards = new List<int> { 31, 2, 2, 17, 12, 5, 41, 18, 33, 35, 43, 37, 7, 8, 25, 29, 54, 3, 12, 46, 24, 34, 31, 51, 9, 1, 28, 4 };

                List<int> newCards = new List<int>() ; //通過新建來解決問題...

                newCards.AddRange(Cards);

                

                List<int> res1ist = new List<int>();

               

                Console.WriteLine("要查找的 findCards ...");

                for (int i = 0; i < findCards.Count; i++)

                {

                    Console.Write(findCards[i] + ",");

                }

                Console.WriteLine();

                Console.WriteLine("被查找的 Cards ...");

                for (int i = 0; i < Cards.Count; i++)

                {

                    Console.Write(Cards[i] + ",");

                }


                Console.WriteLine();

                res1ist = Seach(findCards, newCards);

                Console.WriteLine("查找的結果 res1ist ...");

                for (int i = 0; i < res1ist.Count; i++)

                {

                    Console.Write(res1ist[i] + ",");

                }


                Console.WriteLine();

                Console.WriteLine("被新建的 newCards ... ");

                for (int i = 0; i < newCards.Count; i++)

                {

                    Console.Write(newCards[i] + ",");

                }


                Console.ReadLine();

            }


            /// <summary>

            /// list作為參數形式查找 

            /// 查找一個子list中所有元素在一個父list中的索引

            /// </summary>

            /// <param name="value"></param>

            /// <param name="handcard"></param>

            /// <returns></returns>

            static List<int> Seach(List<int> findcard, List<int> handcard)

            {

                List<int> list_id = new List<int>();


                for (int i = 0; i < findcard.Count; i++)

                {

                    for (int j = 0; j < handcard.Count; j++)

                    {

                        if (findcard[i] == handcard[j])

                        {

                            list_id.Add(j);

                            //value[i] = -1;    

                            handcard[j] = -2;   //這樣會改變原來list 的值

                            break;

                        }

                    }

                }

                return list_id;

            }


            /// <summary>

            /// 數組的重載  

            /// 數組也是引用類型,也存在上面list的那個問題

            /// </summary>

            /// <param name="value"></param>

            /// <param name="handcard"></param>

            /// <returns></returns>

            static List<int> Seach(int[] findcard, int[] handcard)

            {

                List<int> list_id = new List<int>();

                for (int i = 0; i < findcard.Length; i++)

                {

                    for (int j = 0; j < handcard.Length; j++)

                    {

                        if (findcard[i] == handcard[j])

                        {

                            list_id.Add(j);

                            //findcard[i] = -1;

                            handcard[j] = -2;

                            break;

                        }                    

                    }

                }

                return list_id;

            }

        }


    }

    res




    ————————————————

    版權聲明:本文為CSDN博主「妳是我改卟了的bug」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。

    原文鏈接:https://blog.csdn.net/Czhenya/article/details/86303780



    日日摸夜夜添夜夜添无码,free性欧美极度另类,超清中文乱码字幕在线观看,真人美女两腿张开露PP图片