Как сравнить ломтик с другими ломтиками, чтобы увидеть, соответствует ли содержимое - PullRequest
0 голосов
/ 14 декабря 2018

Использование Go 1.11 У меня есть 5 групп из трех чисел в каждом срезе.Я хочу иметь возможность сравнить это с базовым набором данных.

Пример данных

My Groups: [[1 2 3] [4 9 2] [7 9 3] [4 7 5] [4 3 2]]

My Core Data: [5 9 7 3 2]

Так что я хочу иметь возможность сопоставить свои основные данные с любой из групп.Как показывают данные примера, базовые данные имеют 9, 7 и 3, поэтому они должны соответствовать 3-й группе.

Но каждый раз, когда я пытаюсь выполнить цикл, я не понимаю правильную логику.

Любая помощь приветствуется.

ОБНОВЛЕНИЕ

Так что это код, с которым я сейчас работаю

groupData := [][]int{{1,2,3}, {7,8,9}, {9,7,3}}
coreData := []int{5,9,7,3,2}

for _, data := range groupData {
   fmt.Println( data )
   fmt.Println( groupData )

   fmt.Println( reflect.DeepEqual(data, coreData) )
}

Это возвращает false все время.Даже на последнем наборе данных 9,7,3, который вы видите, содержится в codeData var.

Но даже если бы у меня был coreData, как []int{3,2,7,1,9}, это все равно должно было бы привести к истине, так как у него все еще есть 3,7,9, и я хочу, чтобы он соответствовал этой последней группе.

Надеюсь, это объясняет, что я хочу сделать больше.Спасибо.

1 Ответ

0 голосов
/ 14 декабря 2018

Это обновление моего предыдущего ответа, потому что вам нужно частичное совпадение.

Поскольку вы хотите иметь частичное совпадение, вы не можете использовать глубокое равенство.

Но вы можете сделать что-то вродеthis.

func main() {
    groupData := [][]int{{1,2,3}, {7,8,9}, {9,7,3}}
    coreData := []int{5,9,7,3,2}

    // Loop over each group to check a partial match against core
    for _, data := range groupData {
       fmt.Println( check(data, coreData ))

    }
}

func check(group, core[]int) bool {
    // Loop over each group element to check if its available in core
    for _, s := range group{
        if contains(core, s) == false {
            return false
        }   
    }
    return true
}

// Returns true if core contains the element
func contains(core []int, element int) bool {
    for _, a := range core {
        if a == element {
            return true
        }
    }
    return false
}

Этот результат приводит к:

false

false

true

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...