将字符串数组中名称的第一个字符提取到另一个数组中

时间:2018-07-25 12:45:58

标签: arrays swift

我正在使用一个具有大约1100名员工姓名的字符串数组。

我想提取雇员姓名的前几个字符,以便可以按字母顺序在表格视图中的不同部分中划分姓名。就像iPhone上的通讯录应用程序一样。

我尝试过提取

var first_char = [String]()
while (i < employeenames.count)//employeenames is the names array 
    {
 first_char.append(String(employeenames[i].prefix(1)))
 i+=1
}

这样,我得到了所需的字符,但是代码却花了很长时间。我也想计算first_char数组中出现“ A”或“ B”的次数。这又要花几秒钟并占用CPU。

请有人帮我解决这个问题。

3 个答案:

答案 0 :(得分:2)

您似乎想对名称数组执行“分组依据”操作。

您要按第一个字符分组,所以:

import numpy as np
import numpy.linalg as LA
import scipy.optimize as optimize

A = np.array([[1/5, 1/2, 1/3], [1/4, 1/5, 1/6], [1/6, 2/9, 3/10]])
b = np.array([1, 1, 1])
x = LA.solve(A, b)

返回值为let groups = Dictionary(grouping: employeenames, by: { String($0.first!).uppercased() })

要计算[Character: [String]]出现的次数,只需执行以下操作:

A

答案 1 :(得分:1)

使用此代码:

class CartSerializer(serializers.ModelSerializer):
    items = ItemSerializer(source='itemcart_set', many=True)

生成的单字符数组的顺序将与let employeenames = ["Peter", "John", "Frank"] let firstChars = employeenames.map { String($0.first ?? Character("")) } 数组的顺序相同。如果您需要排序:

employeenames

答案 2 :(得分:0)

给予

let employee: [String] = ["James", "Tom", "Ben", "Jim"]

您可以简单地写

let firstCharacters = employee.compactMap { $0.first }

结果

print(firstCharacters)
["J", "T", "B", "J"]

排序

如果要对首字母进行排序,可以添加此行

let sortedFirstCharacters = firstCharacters.sorted()

["B", "J", "J", "T"]

发生次数

let occurrencies = NSCountedSet(array: firstCharacters)

let occurrenciesOfJ = occurrencies.count(for: Character("J"))
// 2