Xáo trộn php

Một số giải pháp trên trang này không đáng tin cậy (chúng chỉ ngẫu nhiên một phần cho mảng). Các giải pháp khác ít hiệu quả hơn đáng kể. Với testShuffleArrayFun (xem bên dưới), chúng tôi có thể kiểm tra các chức năng xáo trộn để xác định độ tin cậy và hiệu suất

function testShuffleArrayFun(getShuffledArrayFun){
    const arr = [0,1,2,3,4,5,6,7,8,9]

    var countArr = arr.map(el=>{
        return arr.map(
            el=> 0
        )
    }) //   For each possible position in the shuffledArr and for 
       //   each possible value, we'll create a counter. 
    const t0 = performance.now()
    const n = 1000000
    for (var i=0 ; i{countArr[key][value]++}
        )
    }
    const t1 = performance.now()
    console.log(`Count Values in position`)
    console.table(countArr)

    const frequencyArr = countArr.map( positionArr => (
        positionArr.map(  
            count => count/n
        )
    )) 

    console.log("Frequency of value in position")
    console.table(frequencyArr)
    console.log(`total time: ${t1-t0}`)
}

Các giải pháp khác nhau

Các giải pháp khác nhau chỉ để giải trí

ES6 thuần khiết, đệ quy

const getShuffledArr = arr => {
    if (arr.length === 1) {return arr};
    const rand = Math.floor(Math.random() * arr.length);
    return [arr[rand], ...getShuffledArr(arr.filter((_, i) => i != rand))];
};

ES6 khiết sử dụng mảng. bản đồ

function getShuffledArr (arr){
    return [...arr].map( (_, i, arrCopy) => {
        var rand = i + ( Math.floor( Math.random() * (arrCopy.length - i) ) );
        [arrCopy[rand], arrCopy[i]] = [arrCopy[i], arrCopy[rand]]
        return arrCopy[i]
    })
}

ES6 netizes by cách sử dụng mảng. Giảm

function getShuffledArr (arr){
    return arr.reduce( 
        (newArr, _, i) => {
            var rand = i + ( Math.floor( Math.random() * (newArr.length - i) ) );
            [newArr[rand], newArr[i]] = [newArr[i], newArr[rand]]
            return newArr
        }, [...arr]
    )
}

Xáo trộn php

Trong bài viết này, chúng tôi sẽ xem xét một số cách để xáo trộn một mảng trong JavaScript

Sắp xếp tùy chỉnh

Cách đầu tiên và đơn giản nhất để xáo trộn một mảng trong JavaScript là cung cấp chức năng tùy chỉnh chức năng cho .sort()

const array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const shuffledArray = array.sort((a, b) => 0.5 - Math.random());

Nhập chế độ FullScreenen EXIT Mode FullScreen

Vì chức năng của chúng tôi chuyển sang .sort() đang tìm kiếm một số dương hoặc âm để chuyển vật liệu 'lên' hoặc 'xuống' trong mảng

Điều này hoạt động theo một cách tiếp cận thô sơ và có sẵn nhưng không thể cung cấp cho bạn một sự xáo trộn thực sự ngẫu nhiên

Nếu bạn thực hiện một chút nghiên cứu về kỹ thuật trên (hãy xem bài viết này), bạn sẽ thấy rằng việc sử dụng chức năng sắp xếp tùy biến là thiếu sót (mặc dù tôi có thể đưa ra câu trả lời câu hỏi về lý trí . )

Nếu bạn cần trộn một mảng và có phân phối các mặt hàng thực sự ngẫu nhiên, bạn cần thực hiện thuật toán Fisher-Yates

Thuật toán Fisher-Yates

May mắn cho chúng tôi, nó không quá phức tạp

const shuffleArray = array => {
  for (let i = array.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    const temp = array[i];
    array[i] = array[j];
    array[j] = temp;
  }
}

Nhập chế độ FullScreenen EXIT Mode FullScreen

Vì chức năng của chúng tôi chuyển sang .sort() đang tìm kiếm một số dương hoặc âm để chuyển vật liệu 'lên' hoặc 'xuống' trong mảng

Điều này hoạt động theo một cách tiếp cận thô sơ và có sẵn nhưng không thể cung cấp cho bạn một sự xáo trộn thực sự ngẫu nhiên

Làm thế nào để bạn trộn trong JavaScript?

Cách đầu tiên và đơn giản nhất để xáo trộn một mảng trong JavaScript là cung cấp một tùy chọn hàm cho một. loại (). const mảng = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];const shuffledArray = mảng. Sắp xếp ((a, b) => 0,5 - toán học. cung cấp chức năng tùy chỉnh cho một. sắp xếp() . mảng const = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; . sắp xếp ((a, b) => 0. 5 - Toán.

Làm thế nào để bạn trộn các đối tượng trong một mảng?

Mảng xáo trộn bằng cách sử dụng lớp ngẫu nhiên, chúng ta có thể lặp lại thông tin qua các phần tử mảng trong một vòng lặp. Sau đó, chúng tôi sử dụng lớp ngẫu nhiên để tạo chỉ mục ngẫu nhiên số. Sau đó, mục tử mục được chuyển đổi hiện tại với mục mục tử được tạo ngẫu nhiên. Ở cuối vòng lặp, chúng ta sẽ có một mảng hỗn hợp ngẫu nhiên. lặp qua các phần tử mảng trong vòng lặp for . Sau đó, chúng tôi sử dụng lớp Random để tạo số chỉ mục ngẫu nhiên. Sau đó trao đổi phần tử chỉ mục hiện tại với phần tử chỉ mục được tạo ngẫu nhiên. Khi kết thúc vòng lặp for, chúng ta sẽ có một mảng được xáo trộn ngẫu nhiên.

Làm thế nào để bạn ngẫu nhiên một danh sách trong java?

Xáo trộn (danh sách) để xáo trộn danh sách với thư viện hoặc bộ sưu tập Java tiêu chuẩn. Xáo trộn (mảng. ASLIST (A)) để xáo trộn các mục trong một mảng