# Isupercase with String Array how tu use?

**URL:** https://discourse.julialang.org/t/isupercase-with-string-array-how-tu-use/22870
**Category:** General Usage
**Created:** [April 7, 2019, 2:07pm UTC](https://discourse.julialang.org/t/isupercase-with-string-array-how-tu-use/22870 "2019-04-07T14:07:41Z")
**Posts on this page:** 12
**Page:** 1

<div class="post-metadata">

### Author: ![programista](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/programista/32/5372_2.png) [@programista](https://discourse.julialang.org/u/programista)
#### Post date: [April 7, 2019, 2:07pm UTC](https://discourse.julialang.org/t/isupercase-with-string-array-how-tu-use/22870/1 "2019-04-07T14:07:41Z")

</div>

isupercase with String Array how tu use ? How to convet Array a to Array of Char?

> julia\> a  
> 3-element Array{String,1}:  
> “a”  
> “5”  
> “A”
> 
> julia\> isuppercase.(a)  
> ERROR: MethodError: no method matching isuppercase(::String)  
> Closest candidates are:  
> isuppercase(::AbstractChar) at strings/unicode.jl:313  
> Stacktrace:  
> [1] \_broadcast\_getindex\_evalf at .\broadcast.jl:574 [inlined]  
> [2] \_broadcast\_getindex at .\broadcast.jl:547 [inlined]  
> [3] getindex at .\broadcast.jl:507 [inlined]  
> [4] copy at .\broadcast.jl:758 [inlined]  
> [5] materialize(::Base.Broadcast.Broadcasted{Base.Broadcast.DefaultArrayStyle{1},Nothing,typeof(isuppercase),Tuple{Array{String,1}}}) at .\broadcast.jl:724  
> [6] top-level scope at none:0  
> Paul

---

<div class="post-metadata">

### Author: ![JeffreySarnoff](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jeffreysarnoff/32/1980_2.png) [@JeffreySarnoff](https://discourse.julialang.org/u/JeffreySarnoff)
#### Post date: [April 7, 2019, 2:22pm UTC](https://discourse.julialang.org/t/isupercase-with-string-array-how-tu-use/22870/3 "2019-04-07T14:22:14Z")

</div>

`[s[1] for s in a]`  
`isuppercase.([s[1] for s in a])`

---

<div class="post-metadata">

### Author: ![DNF](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dnf/32/10191_2.png) [@DNF](https://discourse.julialang.org/u/DNF)
#### Post date: [April 7, 2019, 2:33pm UTC](https://discourse.julialang.org/t/isupercase-with-string-array-how-tu-use/22870/4 "2019-04-07T14:33:22Z")

</div>

Won’t this fail for unicode characters with lengths longer than 1? Not at my computer now, but how about `isuppercase.(first.(a))`?

Are all the strings guaranteed to consist of a single character?

---

<div class="post-metadata">

### Author: ![JeffreySarnoff](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jeffreysarnoff/32/1980_2.png) [@JeffreySarnoff](https://discourse.julialang.org/u/JeffreySarnoff)
#### Post date: [April 7, 2019, 2:40pm UTC](https://discourse.julialang.org/t/isupercase-with-string-array-how-tu-use/22870/5 "2019-04-07T14:40:56Z")

</div>

`first` looks good to me. Although I think the index [1] works too (because its `1`). I have no info about the string’s charcount.

---

<div class="post-metadata">

### Author: ![programista](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/programista/32/5372_2.png) [@programista](https://discourse.julialang.org/u/programista)
#### Post date: [April 7, 2019, 2:43pm UTC](https://discourse.julialang.org/t/isupercase-with-string-array-how-tu-use/22870/6 "2019-04-07T14:43:28Z")

</div>

Thanks , and one more ~!

[a[i] not works  
[a[i][1] this works :

> julia\> isuppercase.([a[i][1] for i=1:length(a)])  
> 3-element BitArray{1}:  
> false  
> false  
> true

Paul

---

<div class="post-metadata">

### Author: ![JeffreySarnoff](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jeffreysarnoff/32/1980_2.png) [@JeffreySarnoff](https://discourse.julialang.org/u/JeffreySarnoff)
#### Post date: [April 7, 2019, 2:45pm UTC](https://discourse.julialang.org/t/isupercase-with-string-array-how-tu-use/22870/7 "2019-04-07T14:45:05Z")

</div>

Its `firstindex` rather than `first`.

---

<div class="post-metadata">

### Author: ![DNF](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dnf/32/10191_2.png) [@DNF](https://discourse.julialang.org/u/DNF)
#### Post date: [April 7, 2019, 3:03pm UTC](https://discourse.julialang.org/t/isupercase-with-string-array-how-tu-use/22870/8 "2019-04-07T15:03:33Z")

</div>

I’m a bit surprised by the performance here:

```julia
julia> a = ["a", "5", "A"]

julia> @btime [isuppercase(first(s)) for s in $a]
  79.761 ns (2 allocations: 112 bytes)
3-element Array{Bool,1}:
 false
 false
  true

julia> @btime isuppercase.(first.($a))
  433.894 ns (3 allocations: 4.31 KiB)
3-element BitArray{1}:
 false
 false
  true

```

---

<div class="post-metadata">

### Author: ![JeffreySarnoff](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jeffreysarnoff/32/1980_2.png) [@JeffreySarnoff](https://discourse.julialang.org/u/JeffreySarnoff)
#### Post date: [April 7, 2019, 3:07pm UTC](https://discourse.julialang.org/t/isupercase-with-string-array-how-tu-use/22870/9 "2019-04-07T15:07:07Z")

</div>

The second is allocating much, much more memory.

---

<div class="post-metadata">

### Author: ![DNF](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dnf/32/10191_2.png) [@DNF](https://discourse.julialang.org/u/DNF)
#### Post date: [April 7, 2019, 3:07pm UTC](https://discourse.julialang.org/t/isupercase-with-string-array-how-tu-use/22870/10 "2019-04-07T15:07:40Z")

</div>

Yes, but it shouldn’t, as far as I can tell.

---

<div class="post-metadata">

### Author: ![JeffreySarnoff](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jeffreysarnoff/32/1980_2.png) [@JeffreySarnoff](https://discourse.julialang.org/u/JeffreySarnoff)
#### Post date: [April 7, 2019, 3:10pm UTC](https://discourse.julialang.org/t/isupercase-with-string-array-how-tu-use/22870/11 "2019-04-07T15:10:00Z")

</div>

The glitch is in broadcasting `isuppercase`. With `map` instead of broadcast, its fast again.

```julia

julia> @btime map(isuppercase,first.($a))
  72.614 ns (3 allocations: 208 bytes)

julia> @btime isuppercase.(first.($a))
  326.126 ns (3 allocations: 4.31 KiB)

```

---

<div class="post-metadata">

### Author: ![DNF](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dnf/32/10191_2.png) [@DNF](https://discourse.julialang.org/u/DNF)
#### Post date: [April 7, 2019, 3:16pm UTC](https://discourse.julialang.org/t/isupercase-with-string-array-how-tu-use/22870/12 "2019-04-07T15:16:50Z")

</div>

> [@JeffreySarnoff](#):
>
> `map(isuppercase,first.($a))`

Seems to me that there is some issue when a `BitArray` is produced instead of a `Vector{Bool}`. I can see the same thing here:

```julia
julia> foo(x, val) = x .> val

julia> bar(x, val) = [y > val for y in x]

julia> @btime foo(1:7, 3)
  397.475 ns (3 allocations: 4.31 KiB)
7-element BitArray{1}:
 false
 false
 false
  true
  true
  true
  true

julia> @btime bar(1:7, 3)
  39.051 ns (1 allocation: 96 bytes)
7-element Array{Bool,1}:
 false
 false
 false
  true
  true
  true
  true

```

A _lot_ of allocations with `BitArray`.

---

<div class="post-metadata">

### Author: ![JeffreySarnoff](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jeffreysarnoff/32/1980_2.png) [@JeffreySarnoff](https://discourse.julialang.org/u/JeffreySarnoff)
#### Post date: [April 7, 2019, 3:18pm UTC](https://discourse.julialang.org/t/isupercase-with-string-array-how-tu-use/22870/13 "2019-04-07T15:18:01Z")

</div>

hmm … seems like you are on to something!
