簡體   English   中英

檢查鋸齒狀陣列中的陣列

[英]Check for Array in Jagged Array

我試圖搜索鋸齒狀數組中的數組。

以下代碼不起作用。 我這是什么錯

int[] array1 = { 1, 2 };

int[][] varray = new int[2][];

varray[0] = new int[] { 1, 2 };
varray[1] = new int[] { 3, 4 };

if (varray.Contains(array1))
{
    Console.WriteLine("varray contains array1");
}

您可以嘗試以下方法:

if (varray.Any(x => x.SequenceEqual(array1)))
{
    Console.WriteLine("varray contains array1");
}

您的array1varray[0]指向內存中的不同位置,因此varray[0] == array1將返回false

因此,如果您這樣做:

varray[0] = array1;

然后Contains將返回true 。這是從Contains (不實現自定義比較器)中獲取true的唯一方法,因為即使兩個數組包含相同的元素,它們也指向內存中的不同位置,而是嘗試使用SequenceEqual ,如果兩個數組包含相同順序的 相同元素 ,則將返回true。

C#中數組的默認相等比較器僅在兩個數組具有相同引用的情況下才發現兩個數組相等。 如果用以下命令替換varray[0]聲明:

varray[0] = array1;

現在,您將發現contains檢查返回true。 盡管有幾種方法可以解決此問題,但一種特別干凈的方法是使用contains重載,它允許您指定自定義相等比較器。 那你會寫

(varray.Contains(array1, new SequenceEqualityComparer()))

您的相等比較器類為:

public class SequenceEqualityComparer : IEqualityComparer<IEnumerable<int>>
{
    public bool Equals(IEnumerable<int> x, IEnumerable<int> y)
    {
        return x.SequenceEqual(y);
    }

    public int GetHashCode(IEnumerable<int> obj)
    {
        return obj.GetHashCode();
    }
}

這是一個示例,如何在此URL https://ideone.com/rsUxTn上不像Demo那樣花哨

using System.IO;
using System;

class Program
{
    static void Main()
    {

        int[] array1 = { 1, 2 };

        int[][] varray = new int[4][];

        varray[0] = new int[] { 1, 2 };
        varray[1] = new int[] { 3, 4 };
        varray[2] = new int[] { 3, 4, 1 };
        varray[3] = new int[] { 3, 4, 9, 10 };

        Console.WriteLine("varray.length = " + varray.Length);
        Console.WriteLine("varray[0].length = " + varray[0].Length);

        int k = 0;
        for (int i = 0; i < varray.Length; i++) { 
            Console.WriteLine(" i = " + i);
            for(int j = 0; j < varray[i].Length; j++) {
                if (j < array1.Length && varray[i][j] == array1[k++]) {                                                                      
                    Console.WriteLine(" j = " + j);
                    Console.WriteLine("varray contains array1"); 
                }
            }
            k = 0;
        } 
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM