如何按长度10、0-10、11-20等对数组进行分组

时间:2019-09-03 14:04:22

标签: c# linq api

我正在尝试按字符串的长度(即1-10、11-20、21-30)对字符串数组进行分组,然后使用Linq / C#对它们进行排序。我当时想我可以遍历并执行if语句,将它们分解为单独的数组,然后将它们重新组合为一个。不过,这感觉很差-像“分组依据”是一个更好的选择,但我无法弄清楚具体如何。

3 个答案:

答案 0 :(得分:1)

使用辅助范围数组,您可以对列表进行分组,然后对其进行排序

string[] list = new[] { "12345", "12", "12", "55", "12345", "1", "22", "333" };

var range = new[] { 2, 4, 5 };
var grouppedItems = list.GroupBy(s => range.First(i => i >= s.Length));
var sortedItems = grouppedItems.OrderBy(group => group.Key);

答案 1 :(得分:0)

问题注释中的一些好主意,这里提供了一个解决方案,您可以在视图中显示记录的同时完全控制每个属性。

您可以使用所需的间隔时间长度,无论是10、15、20,还是最大值,如果要显示每组的长度范围,则在手的每个组都有最小和最大长度。

string[] strings = new[] { "Taco Bell", "McDonalds", "Pizza Hut", "Wendys", "Dunkin' Donuts" };

int lengthRangeInterval = 10;

var groupsByLengthRange = strings.GroupBy(s => s.Length / lengthRangeInterval).Select(g =>
  new
  {
    MinLength = (g.Key * lengthRangeInterval) + 1,
    MaxLength = (g.Key * lengthRangeInterval) + lengthRangeInterval,
    Items = g.ToArray()
  }).OrderBy(g => g.MinLength).ToArray();

答案 2 :(得分:0)

从问题中不清楚您要精确排序的依据。如果您想按长度排序,那么这里是一个解决方案。

import wd from 'wd';

jest.setTimeout(60000);
const PORT = 4723;

const config = {
  platformName: 'iOS',
  deviceName: `iPhone X`,
  platformVersion: '12.2',
  app: '/path/to/my.app',
  useNewWDA: true,
  autoLaunch: false,
};
let screenshotIndex = 0
const driver = wd.promiseChainRemote('localhost', PORT);
directory = '../screenshots';`enter code here`

beforeAll(async () => {
  await driver.init(config);
  await driver.sleep(7000); // wait for app to load
});

afterEach(async () => {
  await driver.takeScreenshot().then(
    function (image, err) {
      require('fs').writeFile(`screenshot-${screenshotIndex++}.png`, image, 'base64');
    }
  );
});

test('appium renders', async () => {
  let contexts = await driver.contexts();
  console.log('contexts', contexts);
  await driver.context(contexts[1]);
  await driver.elementById('username').type('abc@example.com');
  await driver.elementById('password').type('#1234');
  await driver.elementById('Login').click();

});