Конкатентные два массива [дубликат]

Посмотреть сообщение форума Любой способ просмотра экрана Android удаленно без root? - Сообщение № 9 .

  1. Подключите устройство через USB и убедитесь, что отладка работает.
  2. adb tcpip 5555
  3. найти IP-адрес с adb shell netcfg или adb shell ifconfig с 6.0 и выше
  4. adb connect :5555
  5. Отключить USB и продолжить беспроводную отладку.
  6. adb -s :5555 usb, чтобы вернуться к завершению.

Корневой сервер не требуется!

Чтобы найти IP-адрес устройства: запустите adb shell, а затем netcfg. Вы увидите его там. Чтобы найти IP-адрес при использовании OSX, запустите команду adb shell ip route.


ВНИМАНИЕ: оставляя включенную опцию опасной, любой пользователь вашей сети может подключиться к вашему устройству при отладке, даже если вы в сети передачи данных. Сделайте это только при подключении к доверенному Wi-Fi и не забудьте отключить его, когда это будет сделано!


@Sergei предложил изменить строку 2, комментируя: «-d-опция, необходимая для подключения к USB-устройство, когда другое соединение сохраняется (например, подключенный эмулятор или другое устройство Wi-Fi) ».

Эта информация может оказаться полезной для будущих читателей, но я вернулся к исходной версии, которая была получена 178 upvotes.


На каком-то устройстве вы можете сделать то же самое, даже если у вас нет USB-кабеля:

  1. Включить ADB через сеть в настройках разработчика Он должен показать IP-адрес
  2. adb connect :5555
  3. Отключить настройку, когда это сделано

Использование Android Studio есть плагин , позволяющий подключать USB-отладку без необходимости использования какой-либо команды ADB с терминала.

139
задан ninjagecko 9 April 2016 в 03:14
поделиться

12 ответов

Не встроен в Javascript. Некоторые из общих фреймворков Javascript (например, Prototype) предоставляют реализацию, или вы можете написать свой собственный.

4
ответ дан Amber 26 August 2018 в 00:05
поделиться

В дополнение к превосходному и всестороннему ответу ninjagecko все, что требуется, чтобы закрепить два JS-массива в «tuple-mimic»:

//Arrays: aIn, aOut
Array.prototype.map.call( aIn, function(e,i){return [e, aOut[i]];})

Объяснение: Поскольку Javascript не имеет tuples, функции для кортежей, списков и наборов не были высокоприоритетными в спецификации языка. В противном случае подобное поведение доступно простым способом с помощью карты массива в JS> 1,6 . (map на самом деле часто реализуется разработчиками двигателей JS во многих двигателях JS 1.4, несмотря на то, что они не указаны). Основное отличие от zip, izip от Python, ... от функционального стиля map, так как map требует аргумента функции. Кроме того, это функция Array. Вместо этого можно использовать Array.prototype.map, если возникает дополнительная декларация для ввода.

Пример:

_tarrin = [0..constructor, function(){}, false, undefined, '', 100, 123.324,
         2343243243242343242354365476453654625345345, 'sdf23423dsfsdf',
         'sdf2324.234dfs','234,234fsf','100,100','100.100']
_parseInt = function(i){return parseInt(i);}
_tarrout = _tarrin.map(_parseInt)
_tarrin.map(function(e,i,a){return [e, _tarrout[i]]})

Результат:

//'('+_tarrin.map(function(e,i,a){return [e, _tarrout[i]]}).join('),\n(')+')'
>>
(function Number() { [native code] },NaN),
(function (){},NaN),
(false,NaN),
(,NaN),
(,NaN),
(100,100),
(123.324,123),
(2.3432432432423434e+42,2),
(sdf23423dsfsdf,NaN),
(sdf2324.234dfs,NaN),
(234,234fsf,234),
(100,100,100),
(100.100,100)

Связанная производительность:

Использование map над for -loops:

См. . Каков наиболее эффективный способ слияния [1,2] и [7, 8] в [[1,7], [2,8]]

zip tests [/g2]

Примечание: базовые типы, такие как false и undefined не обладают прототипной иерархией объектов и, следовательно, не предоставляют функцию toString. Следовательно, они отображаются как пустые в выводе. Поскольку второй аргумент parseInt является базовым / числовым основанием, которому нужно преобразовать число в, и поскольку map передает индекс в качестве второго аргумента своей аргумент-функции, используется функция-обертка.

11
ответ дан Community 26 August 2018 в 00:05
поделиться

Еще одна вариация Ddi's :

function* iter(it) {
    yield* it;
}

function* zip(...its) {
    its = its.map(iter);
    while (true) {
        let rs = its.map(it => it.next());
        if (rs.some(r => r.done))
            return;
        yield rs.map(r => r.value);
    }
}

for (let r of zip([1,2,3], [4,5,6,7], [8,9,0,11,22]))
    console.log(r.join())

// the only change for "longest" is some -> every

function* zipLongest(...its) {
    its = its.map(iter);
    while (true) {
        let rs = its.map(it => it.next());
        if (rs.every(r => r.done))
            return;
        yield rs.map(r => r.value);
    }
}

for (let r of zipLongest([1,2,3], [4,5,6,7], [8,9,0,11,22]))
    console.log(r.join())

И вот как написать py classic zip(*[iter(a)]*n) :

triples = [...zip(...Array(3).fill(iter(a)))]
0
ответ дан georg 26 August 2018 в 00:05
поделиться

Проверьте библиотеку Underscore .

Underscore предоставляет более 100 функций, которые поддерживают как ваши любимые функциональные помощники workaday: map, filter, invoke - а также больше специализированные лакомства: привязка функций, javascript templating, создание быстрых индексов, глубокое тестирование равенства и т. д.

- скажите людям, которые его сделали

Недавно я начал использовать он специально для функции zip() , и он оставил большое первое впечатление. Я использую jQuery и CoffeeScript, и он отлично сочетается с ними. Подчеркивание поднимается прямо там, где они уходят, и пока это меня не подвело. Кстати, это всего лишь 3kb.

Проверьте это.

26
ответ дан jomo 26 August 2018 в 00:05
поделиться

Библиотека Mochikit предоставляет эту и многие другие Python-подобные функции. разработчик Mochikit также является поклонником Python, поэтому он имеет общий стиль Python, а также обматывает асинхронные вызовы в скрученной структуре.

0
ответ дан Keith 26 August 2018 в 00:05
поделиться

pythonic предлагает zip вдоль некоторых других подобных питону функций:

import {zip} from 'pythonic';

const arr1 = ['a', 'b'];
const arr2 = ['c', 'd', 'e'];
for (const [first, second] of zip(arr1, arr2))
    console.log(`first: ${first}, second: ${second}`);
// first: a, second: c
// first: b, second: d
2
ответ дан Keyvan 26 August 2018 в 00:05
поделиться

Я попробовал это в чистом JS, задаваясь вопросом, как вышеперечисленные плагины выполнили свою работу. Вот мой результат. Я предопределю это, сказав, что я понятия не имею, насколько стабильным это будет в IE и тому подобное. Это просто быстрый макет.

init();

function init() {
    var one = [0, 1, 2, 3];
    var two = [4, 5, 6, 7];
    var three = [8, 9, 10, 11, 12];
    var four = zip(one, two, one);
    //returns array
    //four = zip(one, two, three);
    //returns false since three.length !== two.length
    console.log(four);
}

function zip() {
    for (var i = 0; i < arguments.length; i++) {
        if (!arguments[i].length || !arguments.toString()) {
            return false;
        }
        if (i >= 1) {
            if (arguments[i].length !== arguments[i - 1].length) {
                return false;
            }
        }
    }
    var zipped = [];
    for (var j = 0; j < arguments[0].length; j++) {
        var toBeZipped = [];
        for (var k = 0; k < arguments.length; k++) {
            toBeZipped.push(arguments[k][j]);
        }
        zipped.push(toBeZipped);
    }
    return zipped;
}

Это не пуленепробиваемый, но это все еще интересно.

0
ответ дан Mr. Polywhirl 26 August 2018 в 00:05
поделиться

Как @Brandon, я рекомендую функцию Underscore zip . Тем не менее, он действует как zip_longest, добавляя значения undefined по мере необходимости, чтобы вернуть что-то длину самого длинного ввода.

Я использовал метод mixin для расширения подчеркивания с помощью zipShortest, который действует как zip Python, основанный на на собственном источнике библиотеки для zip .

Вы можете добавить следующее в свой обычный JS-код, а затем вызвать его так, как если бы он был частью подчеркивания: _.zipShortest([1,2,3], ['a']) возвращает [[1, 'a']], например.

// Underscore library addition - zip like python does, dominated by the shortest list
//  The default injects undefineds to match the length of the longest list.
_.mixin({
    zipShortest : function() {
        var args = Array.Prototype.slice.call(arguments);
        var length = _.min(_.pluck(args, 'length')); // changed max to min
        var results = new Array(length);
        for (var i = 0; i < length; i++) {
            results[i] = _.pluck(args, "" + i);
        }
        return results;
}});
2
ответ дан Pat 26 August 2018 в 00:05
поделиться

Python имеет две функции: zip и itertools.zip_longest. Реализация на JS / ES6 выглядит так:

Реализация Python `s zip на JS / ES6

const zip = (...arrays) => {
    const length = Math.min(...arrays.map(arr => arr.length));
    return Array.from({ length }, (value, index) => arrays.map((array => array[index])));
};

Результаты:

console.log(zip(
    [1, 2, 3, 'a'],
    [667, false, -378, '337'],
    [111],
    [11, 221]
));

[[1, 667, 111, 11]]

console.log(zip(
    [1, 2, 3, 'a'],
    [667, false, -378, '337'],
    [111, 212, 323, 433, '1111']
));

[[1, 667, 111], [2, false, 212], [3, -378 , 323], ['a', '337', 433]]

console.log(zip(
    [1, 2, 3, 'a'],
    [667, false, -378, '337'],
    [111],
    []
));

[]

Реализация Python`s zip_longest на JS / ES6

( https://docs.python.org/3.5/library/itertools.html?highlight=zip_longest#itertools.zip_longest )

const zipLongest = (placeholder = undefined, ...arrays) => {
    const length = Math.max(...arrays.map(arr => arr.length));
    return Array.from(
        { length }, (value, index) => arrays.map(
            array => array.length - 1 >= index ? array[index] : placeholder
        )
    );
};

Результаты:

console.log(zipLongest(
    undefined,
    [1, 2, 3, 'a'],
    [667, false, -378, '337'],
    [111],
    []
));

[[1, 667, 111, undefined], [2, false, undefined, undefined], [3, -378, undefined, undefined], ['a', '337', undefined, undefined]]

console.log(zipLongest(
    null,
    [1, 2, 3, 'a'],
    [667, false, -378, '337'],
    [111],
    []
));

[[1, 667, 111, null], [2, false, null, null], [3, -378, null, null], ['a', '337', null, null]]

console.log(zipLongest(
    'Is None',
    [1, 2, 3, 'a'],
    [667, false, -378, '337'],
    [111],
    []
));

[[1 , «Нет», «Нет», «Нет», «2», «Нет», «Нет», [3, -378, «Нет», «Нет»], [ 337 ',' None, 'None']]

4
ответ дан Seti Volkylany 26 August 2018 в 00:05
поделиться

Это приведет к отключению ответа на итератор Ddi :

function* zip(...toZip) {
  const iterators = toZip.map((arg) => arg[Symbol.iterator]());
  const next = () => toZip = iterators.map((iter) => iter.next());
  while (next().every((item) => !item.done)) {
    yield toZip.map((item) => item.value);
  }
}
0
ответ дан Steven Kalt 26 August 2018 в 00:05
поделиться
  const zip = (arr,...arrs)=>arr.map((v,i)=>arrs.reduce((a,arr)=>[...a, arr[i]], [v]))
0
ответ дан T.Chmelevskij 26 August 2018 в 00:05
поделиться

Современный пример ES6 с генератором:

function *zip (...iterables){
    let iterators = iterables.map(i => i[Symbol.iterator]() )
    while (true) {
        let results = iterators.map(iter => iter.next() )
        if (results.some(res => res.done) ) return
        else yield results.map(res => res.value )
    }
}

Сначала мы получаем список итераций как iterators. Обычно это происходит прозрачно, но здесь мы делаем это явно, поскольку мы даем шаг за шагом, пока один из них не исчерпан. Мы проверяем, исчерпан ли какой-либо из результатов (с использованием метода .some()) в заданном массиве, и если это так, мы прерываем цикл while.

4
ответ дан Tamás Sengel 26 August 2018 в 00:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: