Мое решение находится в T-SQL без каких-либо опорных точек:
SELECT
CompanyName,
SUM(CASE WHEN (action='EMAIL') THEN 1 ELSE 0 END) AS Email,
SUM(CASE WHEN (action='PRINT' AND pagecount=1) THEN 1 ELSE 0 END) AS Print1Pages,
SUM(CASE WHEN (action='PRINT' AND pagecount=2) THEN 1 ELSE 0 END) AS Print2Pages,
SUM(CASE WHEN (action='PRINT' AND pagecount=3) THEN 1 ELSE 0 END) AS Print3Pages
FROM
Company
GROUP BY
CompanyName
Это еще проще в Swift:
let string : String = "Hello
Мартин R ответ - лучший подход, и, как он сказал, поскольку String соответствует протоколу SquenceType, вы также можете перечислять строку, получая каждый символ на каждой итерации.
let characters = "Hello"
var charactersArray: [Character] = []
for (index, character) in enumerate(characters) {
//do something with the character at index
charactersArray.append(character)
}
println(charactersArray)
for character in characters { charactersArray.append(character)}
без enumeration()
– Tieme
14 November 2014 в 14:40
Нашел другой способ, используя String.CharacterView.Thought я мог бы поделиться
var reversedText:String = "reversed"
let characters = (reversedText.characters.reversed()).reversed
print(characters)
Также работает, но я предпочитаю решение Martin R.
В Swift 4 вам не нужно использовать characters
для использования map()
. Просто map()
на String.
"ABC".map { String($0) }
print(letters) // ["A", "B", "C"]
print(type(of: letters)) // Array<String>
Или, если вы предпочитаете более короткое: "ABC".map(String.init)
(2-байты
Array
: Array("ABC".characters)
– chrisamanse
30 September 2016 в 13:42
"ABC".characters
и Array("ABC".characters)
нет разницы.
– devxoul
30 September 2016 в 17:08
"ABC".characters
возвращает тип String.CharacterView
. Чтобы преобразовать его в массив, в частности типа [Character]
, вам нужно будет использовать инициализатор Array
.
– chrisamanse
1 October 2016 в 03:56
[String]
вместо [Character]
, потому что op хотел массив строк :)
– devxoul
1 October 2016 в 18:09
Вы также можете создать расширение:
var strArray = "Hello, playground".Letterize()
extension String {
func Letterize() -> [String] {
return map(self) { String($0) }
}
}
Существует также эта полезная функция для String: components (separateBy: String)
let string = "1;2;3"
let array = string.components(separatedBy: ";")
print(array) // returns ["1", "2", "3"]
Хорошо работает для обработки строк, разделенных символом типа ";" или даже "\n"
В Swift 4, поскольку String
является сборником Character
, вам нужно использовать map
let array1 = Array("hello") // Array<Character>
let array2 = Array("hello").map({ "\($0)" }) // Array<String>
let array3 = "hello".map(String.init) // Array<String>
func letterize() -> [Character] {
return Array(self.characters)
}
Обновлено для Swift 4
Вот три способа.
//array of Characters
let charArr1 = [Character](myString)
//array of String.element
let charArr2 = Array(myString)
for char in myString {
//char is of type Character
}
В некоторых случаях то, что действительно хотят люди, это способ преобразования строки в массив маленьких строк с длиной 1 символ. Вот суперэффективный способ сделать это:
//array of String
var strArr = myString.map { String($0)}
Swift 3
Вот три способа.
let charArr1 = [Character](myString.characters)
let charArr2 = Array(myString.characters)
for char in myString.characters {
//char is of type Character
}
В некоторых случаях то, что действительно хотят люди, это способ преобразования строки в массив небольших строк с длиной 1 символ. Вот суперэффективный способ сделать это:
var strArr = myString.characters.map { String($0)}
Или вы можете добавить расширение к String.
extension String {
func letterize() -> [Character] {
return Array(self.characters)
}
}
Тогда вы можете вызвать его так:
let charArr = "Cat".letterize()
let string = "hell0"
let ar = Array(string.characters)
print(ar)
let joined = ", ".join(characters);
), массив приводит к ошибке'String' is not identical to 'Character'
? – Mohamad 3 January 2015 в 22:55", ".join(...)
ожидает массив строк. Ответ devxoul ниже показывает, как вы могли бы разбить на массив строк. – Martin R 3 January 2015 в 23:07characters
представляет собой набор и представление i> для символов строк. Создание массива из символов делает копию. - Конечно, вы можете напрямую обращаться к персонажам:for i in string.characters.indices { print(string.characters[i]) }
или простоfor c in string.characters { print(c) }
– Martin R 28 February 2017 в 07:52